package org.jsola.contract.service;

import org.jsola.contract.dao.IVariableDAO;
import org.jsola.contract.dto.VariableAddDTO;
import org.jsola.contract.dto.VariableUpdateDTO;
import org.jsola.contract.entity.VariableDO;
import org.jsola.contract.query.VariableQuery;
import org.jsola.contract.vo.VariableListVO;
import org.jsola.contract.vo.VariableVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 模板变量
 *
 * @author JanusMix
 */
public interface IVariableService extends IService<IVariableDAO, VariableDO> {

    /**
     * 新增模板变量
     *
     * @param variableAddDTO 新增模板变量DTO
     * @param tokenUser      当前用户
     * @return 模板变量详情信息
     */
    VariableVO save(VariableAddDTO variableAddDTO, TokenUser tokenUser);

    /**
     * 修改模板变量
     *
     * @param variableUpdateDTO 修改模板变量DTO
     * @param tokenUser         当前用户
     * @return 更新数量
     */
    int update(VariableUpdateDTO variableUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除模板变量，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser   当前用户
     * @param variableIds 模板变量id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... variableIds);

    /**
     * 根据模板变量id查找
     *
     * @param variableId 模板变量id
     * @return 模板变量详情信息
     */
    VariableVO selectById(Long variableId);

    /**
     * 查询模板变量
     *
     * @param variableQuery 查询条件
     * @return 模板变量列表信息
     */
    List<VariableListVO> select(VariableQuery variableQuery);

    /**
     * 查询所有模板变量
     *
     * @return 模板变量列表信息
     */
    List<VariableDO> selectAll();

    /**
     * 查询模板变量记录数
     *
     * @param variableQuery 查询条件
     * @return 模板变量记录数
     */
    int selectCount(VariableQuery variableQuery);

    /**
     * 分页查询模板变量
     *
     * @param variableQuery 查询条件
     * @return 模板变量列表信息
     */
    Page<VariableListVO> selectPage(VariableQuery variableQuery);


    /**
     * 根据模板变量id查找
     *
     * @param variableId 模板变量id
     * @return 模板变量
     */
    VariableDO selectDOById(Long variableId);

    /**
     * 查询模板变量
     *
     * @param variableQuery 查询条件
     * @return 模板变量列表
     */
    List<VariableDO> selectDO(VariableQuery variableQuery);
}


